﻿using System.Collections.Generic;
using netCoreStudy.Attr.QueryAttr;
using netCoreStudy.Enum;

namespace netCoreStudy.Entities.Base
{
	// 将 查询参数 封装 成 一个类
	public class BaseParameter
	{
		private const int MaxPageSize = 1000; // 设置最大 页数，如果 不加限制 如果 pageSize传进来 10000也会对数据库造成压力 

		/// <summary>
		/// 当前页数
		/// </summary>
		public int PageIndex { get; set; } = 1; // 如果不传 设置默认值

		/// <summary>
		/// 是否被删除(假删) 
		/// </summary>
		[Where(QueryType.Equal, nameof(BaseEntity.IsRemoved))]
		public bool IsRemoved { get; set; }

		/// <summary>
		/// 开始时间
		/// </summary>
		[Where(QueryType.GreaterThanOrEqual, nameof(BaseEntity.CreateTime))]
		public long StartTime { get; set; }

		/// <summary>
		/// 结束时间
		/// </summary>
		[Where(QueryType.LessThanOrEqual, nameof(BaseEntity.CreateTime))]
		public long EndTime { get; set; }

		/// <summary>
		/// 排序 按照 字段排序 desc 倒序(desc前面记得加空格 默认按CreateTime倒序)
		/// </summary>
		[OrderBy]
		public string OrderBy { get; set; } = $"{nameof(BaseEntity.CreateTime)} desc";

		private int _pageSize = 20;

		/// <summary>
		/// 每页数量
		/// </summary>
		public int PageSize
		{
			get => _pageSize;
			set => _pageSize =
				(value > MaxPageSize)
					? MaxPageSize
					: value; // 如果大于maxPageSize 就 取 maxPageSize (最大值设定的是20) ,小于20 的话就取  pageSize 
		}
	}
}